<?php

/**
 * 认证控制器
 * 登录认证
 * 不涉及权限相关的逻辑
 */

 namespace app\common\controller;

use core\Route;
use core\Context;

class AuthController extends BaseController
{
    /**
     * 构造函数
     * 在对象初始化时自动调用
     * 默认检查用户是否登录
     */
    public function __construct()
    {
        parent::__construct();
        // 检查用户是否登录
        $this->checkLogin();
    }

    /**
     * 检查是否登录
     * 如果未登录，跳转到登录页
     * 如果已登录，继续执行
     */
    protected function checkLogin()
    {
        $user = Context::get('user');
        
        if (!$user) {
            // 尝试从session中加载用户信息到Context
            if (isset($_SESSION['user_id'])) {
                Context::set('user', [
                    'id' => $_SESSION['user_id'],
                    'username' => $_SESSION['username']
                ]);
                return true;
            }
            
            // 未登录，跳转到登录页
            $controller = strtolower(Route::getController());
            $action = Route::getAction();
            $appname = Route::getAppName();
            $this->redirect('/open/login?from=' . $appname . '/' . $controller . '/' . $action);
            return false;
        }
        // 已登录
        return true;
    }

    /**
     * 检查权限
     * 如果没有权限，跳转到403页面
     * 如果有权限，继续执行
     */
    protected function checkAuth()
    {
        if (!isset($_SESSION['user_id'])) {
            // 未登录，跳转到登录页 跟上来源方法
            // 使用 Route 类的静态方法获取控制器和动作名称
            $controller = strtolower(Route::getController());
            $action = Route::getAction();
            $appname = Route::getAppName();
            $this->redirect('/open/login?from=' . $appname . '/' . $controller . '/' . $action);
        }
    }
}